/**
 * @file CategoryBean.java
 * Projet eCOM 2010 (Miage Descartes)
 * @author Doido Sébastien
 * @version 2
 * @brief Bean relatif au traitement des catégories de produits
 */
package ecom.beans;

import java.util.Collection;
import java.util.LinkedList;

import javax.ejb.Remote;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * @brief Bean relatif au traitement des catégories de produits
 * @author Sebastien
 */
@Entity
@Table (name="CATEGORY")
@Remote(CategoryRemote.class)
@NamedQuery(name = "getAllCategories", query = "SELECT OBJECT(p) FROM CategoryBean p")
public class CategoryBean implements java.io.Serializable {

    /**
     * @brief Identifiant unique de catégorie
     */
    @Id
    @Column(name = "id_categ", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int idCateg;
    
    /**
     * @brief Nom de la catégorie
     */
    private String name;

    /**
     * @brief Liste des produits de la catégorie
     */
    @OneToMany(mappedBy = "category")
    private Collection<ProductBean> products;

    public CategoryBean() {
        this.products = new LinkedList<ProductBean>();
    }

    /**
     * @brief Constructeur de catégorie
     * @param name : nom de la catégorie
     */
    public CategoryBean(String name) {
        this();
        this.name = name;
    }

    /**
     * @brief Renvoie l'identifiant de la catégorie
     * @return l'identifiant de la catégorie
     */
    public int getIdCateg() {
        return idCateg;
    }

    /**
     * @brief renvoie le nom de la catégorie
     * @return le nom de la catégorie
     */
    public String getName() {
        return name;
    }

    /**
     * @brief Renvoie les produits associés à la catégorie
     * @return les produits associés à la catégorie
     */
    public Collection<ProductBean> getProducts() {
        return products;
    }

    @Override
    public String toString() {
        return "#" + idCateg + " | " + name;
    }

    /**
     * @brief Ajoute un produit dans la catégorie
     * @param p : produit à ajouter dans la catégorie
     */
    public void addProduct(ProductBean p) {
        this.getProducts().add(p);
    }

    public void setProducts(Collection<ProductBean> products) {
        this.products = products;
    }

    public void setIdCateg(int idCateg) {
        this.idCateg = idCateg;
    }

    public void setName(String name) {
        this.name = name;
    }
}
